﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;
using System.IO;

namespace TMS
{
    public class XMLBaseManager
    {
        #region ATRIBUTOS

        protected string nombreArchivo;
        protected string nombreRoot;
        protected string direccion = HttpContext.Current.Server.MapPath(@"~\Classes\DatosXML\");

        #endregion

        #region METODOS

        //Creacion de documento.
        public void createDoc()
        {
            XDocument xDoc = new XDocument(); //Creacion del nuevo documento.
            xDoc.Declaration = new XDeclaration("1.0", "utf-8", "yes"); //Declaracion del documento.
            xDoc.AddFirst(new XElement(nombreRoot)); //Agrega el elemento raiz.
            saveDoc(xDoc); //Guarda el documento.
        }

        //Carga de documento.
        public XDocument loadDoc()
        {
            if (!File.Exists(direccion + nombreArchivo))
            {
                createDoc();
            }
            XDocument xDoc = XDocument.Load(direccion + nombreArchivo); // levanto el archivo con la dirección del mismo
            return xDoc;
        }

        //Guardar documento.
        public void saveDoc(XDocument pDoc)
        {
            pDoc.Save(direccion + nombreArchivo);
        }

        public long getUltimoId()
        {
            long ultimoId = 1;
            XDocument xDoc = loadDoc();
            foreach (XElement xe in xDoc.Root.Elements())
            { 
                if(long.Parse(xe.Attribute("Id").Value) > ultimoId)
                {
                    ultimoId = long.Parse(xe.Attribute("Id").Value);
                }
            }
            return ultimoId;
        }
        public void removeById(long pId) //Elimina cualquier elemento principal por el Id del elemento.
        {
            XDocument xDoc = loadDoc();
            XElement elemento = xDoc.Root.Elements().Single(a => (long)a.Attribute("Id") == pId);
            elemento.Remove();
            saveDoc(xDoc);
        }

        //@todo hacer metodo de busqueda x nombre.

        //public void removeByName(string pNom)
        //{
        //    XDocument xDoc = loadDoc();

        //}
        #endregion
    }
}